import DebugExt from "../base/DebugExt";

/** 播放指定音效事件 */
export const EVENT_KEY_PLAY_AUDIO: string = "event_key_play_audio";
/** 音效类型枚举 */
export enum TAudioType {
    /** 未定义 */
    Uknow = 0,
    /** 背景音乐 */
    BGM = 1,
    /** 普通音效 */
    Effect,
    /** 人物语音 */
    Voice,
    /** 次背景音效 */
    SubBgm
}
/** 音效事件相关事件参数 */
export interface IEventAudio {
    /** 音效名 */
    audioName: string;
    /** 音效类型 */
    type?: TAudioType;
    /** 停止播放 */
    stop?: boolean;
}

/** 音乐音效播放拓展 */
export default class AudioExt {

    /**
     * 播放指定音乐文件
     * @param audioName 音效名称
     * @param type 音效类型
     */
    static playAudio(audioName: string, type: TAudioType): void {
        if (audioName) {
            DebugExt.log("调用播放音效名：", audioName, " 类型：", type);
            const p: IEventAudio = { audioName, type, stop: false };
            let e = new yy.event.CustomEvent();
            e.eventID = EVENT_KEY_PLAY_AUDIO;
            e.param = p;
            yy.event.emit(yy.event.CustomEvent, e);
        }
    }

    /**
     * 停止指定音乐文件
     * @param audioName 音效名称
     * @param type 音效类型
     */
    static stopAudio(audioName: string, type: TAudioType) {
        if (audioName) {
            DebugExt.log("调用停播音效名：", audioName, " 类型：", type);
            const p: IEventAudio = { audioName, type, stop: true };
            let e = new yy.event.CustomEvent();
            e.eventID = EVENT_KEY_PLAY_AUDIO;
            e.param = p;
            yy.event.emit(yy.event.CustomEvent, e);
        }
    }

    /**
     * 播放普通音效
     * @param audioName 音效名称
     */
    static playEffect(audioName: string): void {
        this.playAudio(audioName, TAudioType.Effect);
    }

    /**
     * 播放人物语音
     * @param audioName 音效名称
     */
    static playVoice(audioName: string): void {
        this.playAudio(audioName, TAudioType.Voice);
    }

    /**
     * 播放次背景音效
     * @param audioName 音效名称
     */
    static playSubBgm(audioName: string): void {
        this.playAudio(audioName, TAudioType.SubBgm);
    }

    /**
     * 停止次背景音效
     * @param audioName 音效名称
     */
    static stopSubBgm(audioName: string): void {
        this.stopAudio(audioName, TAudioType.SubBgm);
    }

    /**
     * 切换背景音乐
     * @param audioName BGM名
     */
    static changeBGM(audioName: string): void {
        this.playAudio(audioName, TAudioType.BGM);
    }

    /** 停止背景音乐 */
    static stopBGM(): void {
        yy.setting.isMusicEnable = false;
    }

    /** 开始播放背景音乐 */
    static playBGM(audioName?: string): void {
        if (!!audioName && audioName.length > 0)
            this.changeBGM(audioName);
        yy.setting.isMusicEnable = true;
    }

}
